## 1.5. Software Features

In this section, we'll introduce you to many of the software applications available for Linux and talk about a number of common computing tasks. After all, the most important part of the system is the wide range of software available for it. What's even more impressive on Linux is that most of this software is freely distributable.

### 1.5.1. Basic Commands and Utilities

Virtually every utility you would expect to find on standard implementations of Unix has been ported to Linux. This includes basic commands such as `ls`, `awk`, `tr`, `sed`, `bc`, `more`, and so on. There are Linux ports of many popular software packages including Perl, Python, the Java Development Kit, and more. You name it--Linux has it. Therefore, you can expect your familiar working environment on other Unix systems to be duplicated on Linux. All of the standard commands and utilities are there. (Novice Unix users should see Chapter 4, "Basic Unix Commands and Concepts" for an introduction to these basic Unix commands.)

Many text editors are available, including `vi` (as well as "modern" versions, such as `vim`), `ex`, `pico`, and `jove`, as well as GNU Emacs and variants, such as XEmacs (which incorporates extensions for use under the X Window System) and `joe`. Whatever text editor you're accustomed to using has more than likely been ported to Linux.

The choice of a text editor is an interesting one. Many Unix users still use "simple" editors such as `vi` (in fact, the authors wrote this book using `vi` and Emacs under Linux). However, `vi` has many limitations due to its age, and more modern (and complex) editors, such as Emacs, are gaining popularity. Emacs supports a complete LISP-based macro language and interpreter, a powerful command syntax, and other fun-filled extensions. Emacs macro packages exist to allow you to read electronic mail and news, edit the contents of directories, and even engage in an artificially intelligent psychotherapy session (indispensable for stressed-out Linux hackers). In Chapter 9, "Editors, Text Tools, Graphics, and Printing", we include a complete `vi` tutorial and describe Emacs in detail.

One interesting note is that most of the basic Linux utilities are GNU software. These GNU utilities support advanced features not found in the standard versions from BSD or AT&T. For example, GNU's version of the `vi` editor, `elvis`, includes a structured macro language, which differs from the original AT&T version. However, the GNU utilities strive to remain compatible with their BSD and System V counterparts. Many people consider the GNU versions of these programs superior to the originals. An example of this are the GNU `gzip` and `bzip2` file-compression utilities, which compress data much more efficiently than the original Unix `compress` utility.

The most important utility to many users is the shell. The shell is a program that reads and executes commands from the user. In addition, many shells provide features such as job control (allowing the user to manage several running processes at once--not as Orwellian as it sounds), input and output redirection, and a command language for writing shell scripts. A shell script is a file containing a program in the shell command language, analogous to a "batch file" under MS-DOS.

There are many types of shells available for Linux. The most important difference between shells is the command language. For example, the C shell (`csh`) uses a command language somewhat like the C programming language. The classic Bourne shell uses a different command language. One's choice of a shell is often based on the command language it provides. The shell that you use defines, to some extent, your working environment under Linux.

No matter what Unix shell you're accustomed to, some version of it has probably been ported to Linux. The most popular shell is the GNU Bourne Again Shell (`bash`), a Bourne shell variant. `bash` includes many advanced features, such as job control, command history, command and filename completion, an Emacs-like (or optionally, a `vi`-like) interface for editing the command line, and powerful extensions to the standard Bourne shell language. Another popular shell is `tcsh`, a version of the C shell with advanced functionality similar to that found in `bash`. Other shells include the Korn shell (`ksh`), BSD's `ash`, `zsh`, a small Bourne-like shell, and `rc`, the Plan 9 shell.

What's so important about these basic utilities? Linux gives you the unique opportunity to tailor a custom system to your needs. For example, if you're the only person who uses your system, and you prefer to use the `vi` editor and the `bash` shell exclusively, there's no reason to install other editors or shells. The "do it yourself" attitude is prevalent among Linux hackers and users.

### 1.5.2. Text Processing and Word Processing

Almost every computer user has a need for some kind of document preparation system. (How many computer enthusiasts do you know who still use pen and paper? Not many, we'll wager.) In the PC world, word processing is the norm: it involves editing and manipulating text (often in a "What-You-See-Is-What-You-Get" [WYSIWYG] environment) and producing printed copies of the text, complete with figures, tables, and other garnishes.

In the Unix world, text processing is much more common, which is quite different from the classical concept of word processing. With a text-processing system, the author enters text using a "typesetting language" that describes how the text should be formatted. Instead of entering the text within a special word processing environment, the author may modify the source with any text editor, such as `vi` or Emacs. Once the source text (in the typesetting language) is complete, the user formats the text with a separate program, which converts the source to a format suitable for printing. This is somewhat analogous to programming in a language such as C, and "compiling" the document into a printable form.

There are many text-processing systems available for Linux. One is `groff`, the GNU version of the classic `troff` text formatter originally developed by Bell Labs and still used on many Unix systems worldwide. Another modern text-processing system is TeX, developed by Donald Knuth of computer science fame. Dialects of TeX, such as LaTeX, are also available.

Text processors such as TeX and `groff` differ mostly in the syntax of their formatting languages. The choice of one formatting system over another is also based upon what utilities are available to satisfy your needs, as well as personal taste.

For example, some people consider the `groff` formatting language to be a bit obscure, so they use TeX, which is more readable by humans. However, `groff` is capable of producing plain ASCII output, viewable on a terminal, while TeX is intended primarily for output to a printing device. Still, various programs exist to produce plain ASCII from TeX-formatted documents or to convert TeX to `groff`, for example.

Another text-processing system is Texinfo, an extension to TeX used for software documentation by the Free Software Foundation. Texinfo is capable of producing a printed document, or an online-browsable hypertext "Info" document from a single source file. Info files are the main format of documentation used by GNU software, such as Emacs.

Text processors are used widely in the computing community for producing papers, theses, magazine articles, and books. (In fact, this book was originally written in the LaTeX format, filtered into a home-grown SGML system, and printed from groff.) The ability to process the source language as a plain-text file opens the door to many extensions to the text processor itself. Because source documents are not stored in an obscure format, readable only by a particular word processor, programmers are able to write parsers and translators for the formatting language, thus extending the system.

What does such a formatting language look like? In general, the formatting language source consists mostly of the text itself, along with "control codes" to produce a particular effect, such as changing fonts, setting margins, creating lists, and so on.

The most famous text formatting language is HTML, which now has a younger cousin in XML; HTML is descended from the SGML in which this book is maintained. The particular tags used in this book (like <PARA> and <TITLE>) come from Docbook, a kind of industry-standard set of tags for marking up technical documentation, which is used in official Linux documentation (to be discussed later in this chapter). Here is a typical section beginning in Docbook:

>     <sect2><title>Basic Commands and Utilities</title>

>     <para>

>     Virtually every utility you would expect to find on standard
>     implementations of Unix has been ported to Linux. This
>     includes basic commands such as <command>ls</command>,
>     <command>awk</command>, <command>tr</command>,
>     <command>sed</command>, <command>bc</command>,
>     <command>more</command>, and so on.  There are Linux ports
>     of many popular software packages including Perl, Python,
>     the Java Development Kit, and more. You name it--Linux has
>     it.  Therefore, you can expect your familiar working
>     environment on other Unix systems to be duplicated on
>     Linux. All of the standard commands and utilities are
>     there.
>     (Novice Unix users should see
>     <xref linkend="X-100-3-chap-basic"> for an introduction to
>     these basic Unix commands.)

>     </para>

At first glance, the typesetting language may appear to be obscure, but it's actually quite easy to learn. Using a text-processing system enforces typographical standards when writing. For example, all enumerated lists within a document will look the same, unless the author modifies the definition of the enumerated list "environment."

The primary goal of typesetting languages is to allow the author to concentrate on writing the actual text, instead of worrying about typesetting conventions. When the example just shown is printed, the commands in `<command>` tags will be printed using whatever font, color, or other convention the publisher has chosen, and a command index can easily be generated too. Furthermore, the correct chapter number and title are plugged in where the strange-looking `<xref&>` tag was written, so they are correct even if the authors reorder the chapters after writing the paragraph.

While there are WYSIWYG editors for HTML (and even a few for SGML) getting used to entering tags by hand, like those in the previous example, actually takes only a little practice. Tools can then generate output in a standard format like PostScript or PDF and display it on the author's screen or send it to a printer. Text-processing systems illustrated in Chapter 9, "Editors, Text Tools, Graphics, and Printing" include LaTeX, its close cousin Texinfo, and `troff`.

WYSIWYG word processors are attractive for many reasons; they provide a powerful, and sometimes complex, visual interface for editing the document. However, this interface is inherently limited to those aspects of text layout that are accessible to the user. For example, many word processors provide a special "format language" for producing complicated expressions such as mathematical formulae. This format language is identical to text processing, albeit on a much smaller scale.

The subtle benefit of text processing is that the system allows you to specify exactly what you mean. Also, text processing systems allow you to edit the source text with any text editor, and the source is easily converted to other formats. The tradeoff for this flexibility and power is the lack of a WYSIWYG interface.

Many users of word processors are used to seeing the formatted text as they edit it. On the other hand, when writing with a text processor, one generally doesn't worry about how the text will appear once it's formatted. The writer learns to expect how the text should look from the formatting commands used in the source.

There are programs that allow you to view the formatted document on a graphics display before printing. One example is the `xdvi` program, which displays a "device independent" file generated by the TeX system under the X Window System. Other software applications, such as `xfig`, provide a WYSIWYG graphics interface for drawing figures and diagrams, which are subsequently converted to the text-processing language for inclusion in your document.

There are many other text-processing utilities available. The powerful METAFONT system, used to design fonts for TeX, is included with the Linux port of TeX. Other programs include `ispell`, an interactive spell checker; `makeindex`, an index generator for LaTeX documents; and many `groff` and TeX-based macro packages for formatting various types of documents and mathematical texts. Conversion programs are available to translate between TeX or `groff` source and many other formats.

In Chapter 9, "Editors, Text Tools, Graphics, and Printing", we discuss LaTeX, `groff`, and other text-formatting tools in detail.

### 1.5.3. Commercial Applications

Commercial software vendors are becoming increasingly interested in making their products available for Linux. These products include office productivity suites, word processors, network administration utilities, and large-scale database engines. In the first two editions of this book, we couldn't say much about commercial application availability, but this is rapidly changing--so much so that by the time you read this, we believe that a host of other commercial application packages will have been ported to Linux.

Star Division (http://www.stardivision.com) has released the Star Office v5.0 office productivity suite for Linux (also available for Windows 98, Windows NT, and other Unix systems). This suite is more or less a clone of Microsoft Office, including a word processor, spreadsheet, HTML editor, presentation manager, and other tools. It is capable of reading file formats from a wide range of similar applications (including Microsoft Office) and is available for free download for non-commercial use.

Corel has ported WordPerfect 8 for Linux, which includes a word processor, spreadsheet, presentation software, personal information manager, and other applications. It is free for personal use. A single-user license for non-personal use is $US49.95 if bought from a retailer or $US69.95 if bought directly from Corel.

Companies such as Oracle, IBM, Informix, Sybase, and Interbase have released (or have announced plans to release) commercial database engines that have been ported to Linux. IBM has released a beta Linux version of its DB2 database server, available for free download from IBM's website (http://www.ibm.com). This beta release does not support clustering or several of the higher-end features found in other versions of DB2, but it does exploit multiprocessors. IBM has also announced that it will provide a Linux version of the popular AFS network filesystem.

Caldera has released NetWare for Linux 1.0, allowing Linux servers to host NetWare file, print, and directory services, and share data with Novell NetWare-based servers. It's compatible with NetWare 4.10b and NetWare clients for Windows 3.1/95/98, DOS, Linux, Macintosh, and UnixWare.

### 1.5.4. Programming Languages and Utilities

Linux provides a complete Unix programming environment, including all of the standard libraries, programming tools, compilers, and debuggers that you would expect to find on other Unix systems. Within the Unix software development world, applications and systems programming is usually done in C or C++. The standard C and C++ compiler for Linux is GNU's `gcc`, which is an advanced, modern compiler supporting many options. It's also capable of compiling C++ (including AT&T 3.0 features) as well as Objective-C, another object-oriented dialect of C.

Java, a relative newcomer on the programming-language scene, is fully supported under Linux. Sun's Java Development Kit Version 1.2 (also known as "Java 2") has been ported to Linux and is fully functional. Java is an object-oriented programming language and runtime environment that supports a diverse range of applications like web page applets, Internet-based distributed systems, database connectivity, and more. Programs written for Java can be run on any system (regardless of CPU architecture or operating system) that supports the Java Virtual Machine. There has been a great deal of excitement in the marketplace over the possibilities presented by Java.

Besides C, C++, and Java, many other compiled and interpreted programming languages have been ported to Linux, such as Smalltalk, FORTRAN, Pascal, LISP, Scheme, and Ada. In addition, various assemblers for writing machine code are available, as are Unix-hacking favorites such as Perl (the script language to end all script languages), Tcl/Tk (a shell-like command-processing system that includes support for developing simple X Window System applications), and Python (the first scripting language to be designed as object-oriented from the ground up).

The advanced `gdb` debugger has been ported, which allows you to step through a program to find bugs or examine the cause for a crash using a core dump. `gprof`, a profiling utility, will give you performance statistics for your program, letting you know where your program is spending most of its time. The Emacs text editor provides an interactive editing and compilation environment for various programming languages. Other tools that have been ported to Linux include GNU `make` and `imake`, used to manage compilation of large applications, and RCS, a system for source locking and revision control.

Linux is ideal for developing Unix applications. It provides a modern programming environment with all of the bells and whistles. Professional Unix programmers and system administrators can use Linux to develop software at home and then transfer the software to Unix systems at work. This not only can save a great deal of time and money, but also lets you work in the comfort of your own home.[10] Computer science students can use Linux to learn Unix programming and to explore other aspects of the system, such as kernel architecture.

> [10]The authors use their Linux systems to develop and test X applications at home, which can then be directly compiled on workstations elsewhere.

With Linux, not only do you have access to the complete set of libraries and programming utilities, but you also have the complete kernel and library source code at your fingertips.

Chapters 13 and 14 are devoted to the programming languages and tools available for Linux.

### 1.5.5. The X Window System

The X Window System is the standard graphics interface for Unix machines. It's a powerful environment supporting many applications. Using X, the user can have multiple terminal windows on the screen at once, each window containing a different login session. A pointing device, such as a mouse, is generally used with the X interface.

One of the real strengths of the X Window System is that its "look and feel" is greatly customizable. It's possible to emulate the Windows 95/98, Macintosh, and NeXTStep environments under X, as well as to create totally novel desktop configurations (many Linux users prefer to make up their own).

Many X-specific applications have been written, such as games, graphics utilities, programming and documentation tools, and so on. With Linux and X, your system is a bona fide workstation. Coupled with TCP/IP networking, you can even display X applications running on other machines on your Linux screen, as is possible with other systems running X.

The X Window System, originally developed at MIT, is freely distributable. However, many commercial vendors have distributed proprietary enhancements to the original X software. The version of X available for Linux is known as XFree86, a port of X11R6 made freely distributable for PC-based Unix systems, such as Linux. XFree86 supports a wide range of video hardware, including VGA, Super VGA, and a number of accelerated video adaptors. XFree86 is a complete distribution of the X software, containing the X server itself, many applications and utilities, programming libraries, and documentation.

Standard X applications include `xterm` (a terminal emulator used for most text-based applications within an X window), `xdm` (the X Session Manager, which handles logins), `xclock` (a simple clock display), `xman` (an X-based manual page reader), and more. The many X applications available for Linux are too numerous to mention here, but the base XFree86 distribution includes the "standard" applications found in the original MIT release. Many others are available separately, and theoretically any application written for X should compile cleanly under Linux.

The look and feel of the X interface is controlled to a large extent by the window manager. This friendly program is in charge of the placement of windows, the user interface for resizing, iconifying, and moving windows, the appearance of window frames, and so on. The standard XFree86 distribution includes `twm`, the classic MIT window manager, although more advanced window managers, such as the Open Look Virtual Window Manager (`olvwm`), are available as well. One window manager that is popular among Linux users is `fvwm2`. This is a small window manager, requiring less than half of the memory used by `twm`. It provides a 3D appearance for windows, as well as a virtual desktop; if the user moves the mouse to the edge of the screen, the entire desktop is shifted as if the display were much larger than it actually is. `fvwm2` is greatly customizable and allows all functions to be accessed from the keyboard as well as from the mouse. Many Linux distributions use `fvwm2` as the standard window manager.

The XFree86 distribution contains programming libraries and includes files for those wily programmers who wish to develop X applications. Various widget sets, such as Athena, Open Look, and Xaw3D, are supported. All of the standard fonts, bitmaps, manual pages, and documentation are included. PEX (a programming interface for 3D graphics) is also supported, as is Mesa, a free implementation of the OpenGL 3D graphics primitives.

In Chapter 10, "Installing the X Window System" and Chapter 11, "Customizing Your X Environment", we'll discuss how to install and use the X Window System on your Linux machine.

### 1.5.6. KDE and GNOME

KDE and GNOME are two new and noteworthy projects generating a lot of excitement in the Linux world. Both systems intend to produce a complete integrated graphical desktop environment, running on top of the X Window System. By building up a powerful suite of development tools, libraries, and applications that are integrated into the desktop environment, KDE and GNOME aim to usher in the next era of Linux desktop computing. Both systems provide a rich GUI, window manager, utilities, and applications that rival or exceed the features of systems such as the Windows 98 desktop.

With KDE and GNOME, even casual users and beginners will feel right at home with Linux. Most distributions automatically configure one of these desktop environments during installation, making it unnecessary to ever touch the text-only console interface.

While both KDE and GNOME aim to make the Unix environment more user-friendly, they have different emphases. KDE's main goals are ease-of-use, stability, and user-interface compatibility with other computing environments (such as Windows 95). GNOME, on the other hand, aims more at good looks and maximum configurability.

### 1.5.7. Networking

Linux boasts one of the most powerful and robust networking systems in the world--so much so that more and more people are finding that Linux makes an excellent choice as a network server. Linux supports the two primary networking protocols for Unix systems: TCP/IP and UUCP. TCP/IP (Transmission Control Protocol/Internet Protocol, for acronym aficionados) is the set of networking paradigms that allows systems all over the world to communicate on a single network known as the Internet. With Linux, TCP/IP, and a connection to the network, you can communicate with users and machines across the Internet via the Web, electronic mail, Usenet news, file transfers with FTP, and more.

Most TCP/IP networks use Ethernet as the physical network transport. Linux supports many popular Ethernet cards and interfaces for personal computers and laptops. Linux also supports Fast Ethernet, Gigabit Ethernet, ATM, ISDN, wireless LAN adapters, Token Ring, packet radio, and a number of high-performance network interfaces.

However, because not everyone has an Ethernet drop at home, Linux also supports PPP and SLIP, allowing you to connect to the Internet via modem. In order for you to use PPP or SLIP, your ISP will have to provide you with an account on their dial-in server, Many businesses and universities provide dial-in PPP or SLIP access. In fact, if your Linux system has an Ethernet connection as well as a modem, you can configure it as a PPP/SLIP server for other hosts.

Linux supports a wide range of web browsers (including Netscape Navigator, the free Mozilla spin-off, and the text-based Lynx browser). With a web browser and a Linux machine connected to the Internet, you can engage in Web surfing, email, chat, news, and many other web-based services.

Linux also hosts a range of web servers (including the popular and free Apache web server). In fact, it's estimated that Apache running on Linux systems drives more web sites than any other platform in the world. Apache is easy to set up and use; we'll show you how in Chapter 16, "The World Wide Web and Electronic Mail".

Samba is a package that allows Linux machines to act as a Windows file and print server. NFS allows your system to share files seamlessly with other machines on the network. With NFS, remote files look to you as if they were located on your own system's drives. File Transfer Protocol (FTP) allows you to transfer files to and from other machines on the network.

A full range of mail and news readers are available for Linux, such as Elm, Pine, `rn`, `nn`, and `tin`. Whatever your preference, you can configure your Linux system to send and receive electronic mail and news from all over the world.

Other networking features include NNTP-based electronic news systems such as C News and INN; the `sendmail`, `exim` and `smail` mail transfer agents; `telnet`, `rlogin`, `ssh`, and `rsh`, which allow you to log in and execute commands on other machines on the network; and `finger`, which allows you to get information on other Internet users. There are tons of TCP/IP-based applications and protocols out there.

If you have experience with TCP/IP applications on other Unix systems, Linux will be familiar to you. The system provides a standard socket programming interface, so virtually any program that uses TCP/IP can be ported to Linux. The Linux X server also supports TCP/IP, allowing you to display applications running on other systems on your Linux display. Administration of Linux networking will be familiar to those coming from other Unix systems, as the configuration and monitoring tools are similar to their BSD counterparts.

In Chapter 15, "TCP/IP and PPP", we'll discuss the configuration and setup of TCP/IP, including PPP, for Linux. We'll also discuss configuration of web browsers, web servers, and mail software.

UUCP (Unix to Unix Copy) is an older mechanism used to transfer files. UUCP machines are connected to each other over phone lines via modem, but UUCP is able to transport over a TCP/IP network as well. If you do not have access to a TCP/IP network or a PPP server, you can configure your system to send and receive files and electronic mail using UUCP.

### 1.5.8. Telecommunications and BBS Software

Telecommunications software under Linux is very similar to that found under Windows or other operating systems. Anyone who has used a telecommunications package will find the Linux equivalent familiar. If you have a modem, you will be able to communicate with other machines using one of the telecommunications packages available for Linux. Many people use telecommunications software to access bulletin board systems (BBSes), as well as commercial online services. Other people use their modems to connect to a Unix system at work or school. You can even use your modem and Linux system to send and receive facsimiles.

One of the most popular communications packages for Linux is Seyon, an X application providing a customizable, ergonomic interface, with built-in support for various file-transfer protocols such as Kermit, Zmodem, and so on. Other telecommunications programs include C-Kermit, `pcomm`, and `minicom`. These are similar to communications programs found on other operating systems and are quite easy to use. Zmodem for Linux is described in Appendix H, "Zmodem File Transfer".

If you do not have access to a PPP server (see the previous section), you can use `term` to multiplex your serial line. `term` allows you to open multiple login sessions over the modem connection to a remote machine. `term` also allows you to redirect X client connections to your local X server through the serial line, enabling you to display remote X applications on your Linux system. Another software package, KA9Q, implements a similar SLIP-like interface.

If you do not have access to a TCP/IP network or UUCP feed, Linux allows you to communicate with a number of BBS networks, such as Fidonet, with which you can exchange electronic news and mail via the phone line.

### 1.5.9. Interfacing with Windows and MS-DOS

Various utilities exist to interface with the world of Windows 95, Windows 98, and MS-DOS. The most well-known application is a project known as Wine--a Microsoft Windows emulator for the X Window System under Linux. The intent of this project, which is still under development, is to allow Microsoft Windows applications to run directly under Linux. This is similar to the proprietary WABI Windows emulator from Sun Microsystems. Wine is in a process of continual development, and now runs a wide variety of Windows software, including many desktop applications and several games. See http://www.winehq.com for details of the project's progress.

Linux provides a seamless interface for transferring files between Linux and Windows systems. You can mount a Windows partition or floppy under Linux, and directly access Windows files as you would any others. In addition, there is the `mtools` package that allows direct access to MS-DOS-formatted floppies, as well as `htools`, which does the same for Macintosh floppy disks.

Another application is the Linux MS-DOS Emulator, which allows you to run many MS-DOS applications directly from Linux. Although Linux and MS-DOS are completely different operating systems, the x86 protected-mode environment allows certain tasks to behave as if they were running in 8086-emulation mode, as MS-DOS applications do.

The MS-DOS emulator is still under development, yet many popular applications run under it. Understandably, however, MS-DOS applications that use bizarre or esoteric features of the system may never be supported, because it's only an emulator. For example, you wouldn't expect to be able to run any programs that use x86 protected-mode features, such as Microsoft Windows (in 386-enhanced mode, that is).

Applications that run successfully under the Linux MS-DOS Emulator include 4DOS (a command interpreter), Foxpro 2.0, Harvard Graphics, MathCad, Turbo Assembler, Turbo C/C++, Turbo Pascal, Microsoft Windows 3.0 (in real mode), and WordPerfect 5.1. Standard MS-DOS commands and utilities, such as `PKZIP`, work with the emulator as well.

The MS-DOS Emulator is meant mostly as an ad hoc solution for those people who need MS-DOS only for a few applications, but use Linux for everything else. It's not meant to be a complete implementation of MS-DOS. Of course, if the Emulator doesn't satisfy your needs, you can always run MS-DOS as well as Linux on the same system (but not at the same time). Using the LILO boot loader, you can specify which operating system to start at boot time. Linux can coexist with other operating systems, such as OS/2, as well.

We'll show you how to use the MS-DOS emulator in the section "Section 12.2.1, "DOS Emulators: Dosemu and xdos"" in Chapter 12, "Windows Compatibility and Samba", along with other ways to interface Linux with Windows.

### 1.5.10. Other Applications

A host of miscellaneous applications are available for Linux, as one would expect from such a hodgepodge operating system. Linux's primary focus is currently for personal Unix computing, but this is rapidly changing. Business and scientific software is expanding, and commercial software vendors are beginning to contribute to the growing pool of applications.

Scientific computing applications include FELT (a finite element analysis tool), `gnuplot` (a plotting and data analysis application), Octave (a symbolic mathematics package, similar to MATLAB), `xspread` (a spreadsheet calculator), `xfractint` (an X-based port of the popular Fractint fractal generator), `xlispstat` (a statistics package), and more. Other applications include Spice (a circuit design and analysis tool) and Khoros (an image/digital signal processing and visualization system).

Of course, there are many more such applications that have been, and can be, ported to run on Linux. Whatever your field, porting Unix-based applications to Linux should be straightforward. Linux provides a complete Unix programming interface, sufficient to serve as the base for any scientific application.

As with any operating system, Linux has its share of games. These include classic text-based dungeon games such as Nethack and Moria; MUDs (multiuser dungeons, which allow many users to interact in a text-based adventure) such as DikuMUD and TinyMUD; and a slew of X games, such as `xtetris`, `netrek`, and `Xboard` (the X11 front-end to `gnuchess`). There has been increasing commercial interest in graphics-intensive games under Linux, and iD Software has produced Linux versions of Quake, Quake II, Quake III, and Doom. A number of other PC game vendors are providing Linux versions as well, and many of them admit to developing their software almost entirely under Linux!

For audiophiles, Linux has support for various sound cards and related software, such as CDplayer (a program that can control a CD-ROM drive as a conventional CD player, surprisingly enough), MIDI sequencers and editors (allowing you to compose music for playback through a synthesizer or other MIDI-controlled instrument), and sound editors for digitized sounds.

Can't find the application you're looking for? Freshmeat, found on the Web at http://www.freshmeat.net, is a popular directory of free software, nearly all of which runs under Linux. While this directory is far from complete, it contains a great deal of software. Take a look at it just to see the enormous amount of code that has been developed for Linux.

If you absolutely can't find what you need, you can always attempt to port the application from another platform to Linux. Or, if all else fails, you can write the application yourself. That's the spirit of Free Software--if you want something to be done right, do it yourself!

Copyright © 2001 O'Reilly & Associates. All rights reserved.